#version 130

// Las matrices de transformacion
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;

// Los datos para la iluminacion
uniform mat3 normalMatrix;
uniform vec3 direccionLuz;

// Para el fragment shader
out vec3 normal;
out vec4 TexCoord;
out vec3 luzDir_viewSpace;
out vec3 vertexPos_viewSpace;


void main(){
	// Pasa los datos de la textura al fragment shader
	TexCoord  = gl_MultiTexCoord0;

	// Se necesitan las normales interpoladas, por eso las paso al fragment shader
	normal = normalize( normalMatrix * gl_Normal );

	// Calcula la posicion del vertice
	gl_Position = projectionMatrix * viewMatrix * modelMatrix * gl_Vertex;

	// Para la iluminacion especular
	vertexPos_viewSpace = vec3(0, 0, 0) - ( viewMatrix * modelMatrix * gl_Vertex ).xyz;
	luzDir_viewSpace = normalize( viewMatrix * vec4(direccionLuz, 0.0) ).xyz;
}
